#!/usr/bin/python

from Window import *

class PolygonStippling(Window):
	'''Demonstrates polygon stippling.'''

	def __init__(self):
		'''Define stippling data.'''
		super(PolygonStippling, self).__init__("polys.c", "Polygon Stippling", 350, 150)
		self.fly = (
			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60,
			0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20,
			0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20,
			0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22,
			0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
			0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
			0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
			0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC,
			0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30,
			0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0,
			0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0,
			0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30,
			0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08,
			0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08,
			0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08,)
		self.halftone = (
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
			0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,)

	def display(self):
		'''Draw one solid, unstippled rectangle then two stippled rectangles.'''
		glClear(GL_COLOR_BUFFER_BIT)
		glColor3f(1, 1, 1)
		glRectf(25, 25, 125, 125)
		glEnable(GL_POLYGON_STIPPLE)
		glPolygonStipple(self.fly)
		glRectf(125, 25, 225, 125)
		glPolygonStipple(self.halftone)
		glRectf(225, 25, 325, 125)
		glDisable(GL_POLYGON_STIPPLE)
		glFlush()

if __name__ == '__main__':
	PolygonStippling().run()
